{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Encoding fingerprint latent representation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/chemprop/chemprop/blob/main/examples/mpnn_fingerprints.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Install chemprop from GitHub if running in Google Colab\n",
    "import os\n",
    "\n",
    "if os.getenv(\"COLAB_RELEASE_TAG\"):\n",
    "    try:\n",
    "        import chemprop\n",
    "    except ImportError:\n",
    "        !git clone https://github.com/chemprop/chemprop.git\n",
    "        %cd chemprop\n",
    "        !pip install .\n",
    "        %cd examples"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import torch\n",
    "from sklearn.decomposition import PCA\n",
    "from pathlib import Path\n",
    "\n",
    "from chemprop import data, featurizers, models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Change model input here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "chemprop_dir = Path.cwd().parent\n",
    "checkpoint_path = chemprop_dir / \"tests/data/example_model_v2_regression_mol.ckpt\" # path to the checkpoint file.\n",
    "# If the checkpoint file is generated using the training notebook,\n",
    "# it will be in the `checkpoints` folder with name similar to `checkpoints/epoch=19-step=180.ckpt`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MPNN(\n",
       "  (message_passing): BondMessagePassing(\n",
       "    (W_i): Linear(in_features=86, out_features=300, bias=False)\n",
       "    (W_h): Linear(in_features=300, out_features=300, bias=False)\n",
       "    (W_o): Linear(in_features=372, out_features=300, bias=True)\n",
       "    (dropout): Dropout(p=0.0, inplace=False)\n",
       "    (tau): ReLU()\n",
       "    (V_d_transform): Identity()\n",
       "    (graph_transform): GraphTransform(\n",
       "      (V_transform): Identity()\n",
       "      (E_transform): Identity()\n",
       "    )\n",
       "  )\n",
       "  (agg): MeanAggregation()\n",
       "  (bn): BatchNorm1d(300, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "  (predictor): RegressionFFN(\n",
       "    (ffn): MLP(\n",
       "      (0): Sequential(\n",
       "        (0): Linear(in_features=300, out_features=300, bias=True)\n",
       "      )\n",
       "      (1): Sequential(\n",
       "        (0): ReLU()\n",
       "        (1): Dropout(p=0.0, inplace=False)\n",
       "        (2): Linear(in_features=300, out_features=1, bias=True)\n",
       "      )\n",
       "    )\n",
       "    (criterion): MSE(task_weights=[[1.0]])\n",
       "    (output_transform): UnscaleTransform()\n",
       "  )\n",
       "  (X_d_transform): Identity()\n",
       "  (metrics): ModuleList(\n",
       "    (0-1): 2 x MSE(task_weights=[[1.0]])\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mpnn = models.MPNN.load_from_checkpoint(checkpoint_path)\n",
    "mpnn.eval()\n",
    "mpnn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Change data input here"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_path = '../tests/data/smis.csv'\n",
    "smiles_column = 'smiles'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[MoleculeDatapoint(mol=<rdkit.Chem.rdchem.Mol object at 0x169da04a0>, y=None, weight=1.0, gt_mask=None, lt_mask=None, x_d=None, x_phase=None, name='Cn1c(CN2CCN(CC2)c3ccc(Cl)cc3)nc4ccccc14', V_f=None, E_f=None, V_d=None),\n",
       " MoleculeDatapoint(mol=<rdkit.Chem.rdchem.Mol object at 0x2812773e0>, y=None, weight=1.0, gt_mask=None, lt_mask=None, x_d=None, x_phase=None, name='COc1cc(OC)c(cc1NC(=O)CSCC(=O)O)S(=O)(=O)N2C(C)CCc3ccccc23', V_f=None, E_f=None, V_d=None),\n",
       " MoleculeDatapoint(mol=<rdkit.Chem.rdchem.Mol object at 0x2814303c0>, y=None, weight=1.0, gt_mask=None, lt_mask=None, x_d=None, x_phase=None, name='COC(=O)[C@@H](N1CCc2sccc2C1)c3ccccc3Cl', V_f=None, E_f=None, V_d=None),\n",
       " MoleculeDatapoint(mol=<rdkit.Chem.rdchem.Mol object at 0x281431a10>, y=None, weight=1.0, gt_mask=None, lt_mask=None, x_d=None, x_phase=None, name='OC[C@H](O)CN1C(=O)C(Cc2ccccc12)NC(=O)c3cc4cc(Cl)sc4[nH]3', V_f=None, E_f=None, V_d=None),\n",
       " MoleculeDatapoint(mol=<rdkit.Chem.rdchem.Mol object at 0x281431af0>, y=None, weight=1.0, gt_mask=None, lt_mask=None, x_d=None, x_phase=None, name='Cc1cccc(C[C@H](NC(=O)c2cc(nn2C)C(C)(C)C)C(=O)NCC#N)c1', V_f=None, E_f=None, V_d=None)]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test = pd.read_csv(test_path)\n",
    "\n",
    "smis = df_test[smiles_column]\n",
    "\n",
    "test_data = [data.MoleculeDatapoint.from_smi(smi) for smi in smis]\n",
    "test_data[:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Get featurizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "featurizer = featurizers.SimpleMoleculeMolGraphFeaturizer()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Get datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_dset = data.MoleculeDataset(test_data, featurizer=featurizer)\n",
    "test_loader = data.build_dataloader(test_dset, shuffle=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Calculate fingerprints"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`models.MPNN.encoding(inputs : BatchMolGraph, i : int)` calculate the i-th hidden representation.\n",
    "\n",
    "`i` ia the stop index of slice of the MLP used to encode the input. That is, use all\n",
    "layers in the MLP _up to_ :attr:`i` (i.e., ``MLP[:i]``). This can be any integer\n",
    "value, and the behavior of this function is dependent on the underlying list\n",
    "slicing behavior. For example:\n",
    "\n",
    "* ``i=0``: use a 0-layer MLP (i.e., a no-op)\n",
    "* ``i=1``: use only the first block\n",
    "* ``i=-1``: use _up to_ the second-to-last block"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([100, 300])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with torch.no_grad():\n",
    "    fingerprints = [\n",
    "        mpnn.encoding(batch.bmg, batch.V_d, batch.X_d, i=0)\n",
    "        for batch in test_loader\n",
    "    ]\n",
    "    fingerprints = torch.cat(fingerprints, 0)\n",
    "\n",
    "fingerprints.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([100, 300])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with torch.no_grad():\n",
    "    encodings = [\n",
    "        mpnn.encoding(batch.bmg, batch.V_d, batch.X_d, i=1)\n",
    "        for batch in test_loader\n",
    "    ]\n",
    "    encodings = torch.cat(encodings, 0)\n",
    "\n",
    "encodings.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using fingerprints"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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E7PX69ChQ7r99tt1yimnqGfPnurfv7+uuOIK7dmzJ3WDTqElS5YoPz9fmZmZGjVqlN54440Oz3/99dc1atQoZWZm6oQTTtCyZctSNFJ7MHO9Vq9erQkTJuhb3/qWsrOzVVxcrFdeeSWFo7We2ddX2Jtvvqlu3bppxIgRyR2gDZm9Zk1NTZo3b54GDx6sjIwMDRkyRI888kjsP9BAVL/85S+N3/72t8acOXMMv98f02PuvfdeIysry3juueeMd955x5gyZYqRl5dnNDQ0JHewNlBSUmIUFhYa69evN9avX28UFhYaP/jBDzp8zDXXXGMMGTLEeO2114yamhrjoYceMtLT040XXnghRaO2VjzX7P333zdycnKMn//850ZVVZWxc+dO46WXXjI+/fTTFI3aOvFcr7Dnn3/eOPXUU43+/fsbv/vd75I7UJswe70OHDhgnHvuucaqVauM//mf/zEqKyuNMWPGGKNGjUrhqFPj6aefNrp37248/PDDRnV1tXHjjTcaPXv2ND766KOo53/wwQfG0Ucfbdx4441GdXW18fDDDxvdu3c3nn322RSP3Bpmr9eNN95oLFq0yNi4caPx3nvvGXPnzjW6d+9uVFVVpXjk1jB7vcIOHDhgnHDCCcbEiRONU089NTWDtYl4rtmFF15ojBkzxqioqDBqamqMt956y3jzzTdj/pkE4E48+uijMQXgUChk5ObmGvfee2/LscbGRsPv9xvLli1L4gitV11dbUgyNmzY0HKssrLSkGT8z//8T7uPGzZsmHH33XdHHBs5cqRx5513Jm2sdhHvNZsyZYoxY8aMVAzRVuK9XoZhGJ988okxYMAAY9u2bcbgwYM9EYC7cr2OtHHjRkNSp/9wO01RUZExa9asiGMnn3yycccdd0Q9/7bbbjNOPvnkiGPXXnutMXbs2KSN0U7MXq9oCgoKjAULFiR6aLYU7/WaMmWKceeddxqlpaWeC8Bmr9lf/vIXw+/3G/X19XH/TEogEqSmpkZ1dXWaOHFiy7GMjAydddZZWr9+vYUjS77Kykr5/X6NGTOm5djYsWPl9/s7fO6nn3661qxZo927d8swDL322mt67733dN5556Vi2JaK55qFQiH9+c9/1kknnaTzzjtPffv21ZgxY/TCCy+kaNTWifc1FgqFNHPmTP385z/XsGHDUjFUW4j3erUWCATk8/liLgNzgm+++UabN2+O+FstSRMnTmz32lRWVrY5/7zzztOmTZt06NChpI3VDuK5Xq2FQiEdPHhQOTk5yRiircR7vR599FHt3LlTpaWlyR6i7cRzzdasWaPRo0fr//yf/6MBAwbopJNO0q233qqvv/465p9LAE6Quro6SVK/fv0ijvfr16/la25VV1envn37tjnet2/fDp/773//exUUFGjgwIHq0aOHSkpKtGTJEp1++unJHK4txHPN9u7dqy+++EL33nuvSkpK9Oqrr+qSSy7Rv/3bv+n1119P9pAtFe9rbNGiRerWrZtuuOGGZA7PduK9XkdqbGzUHXfcoenTpys7OzvRQ7TMvn37FAwGTf2trquri3r+4cOHtW/fvqSN1Q7iuV6t3Xffffryyy912WWXJWOIthLP9dqxY4fuuOMOPfnkk+rWrVsqhmkr8VyzDz74QOvWrdO2bdv0/PPP6/7779ezzz6r6667Luaf66kAPH/+fPl8vg4/Nm3a1KWf4fP5Ij43DKPNMacwc72iPcfOnvvvf/97bdiwQWvWrNHmzZt133336Wc/+5n++te/Ju05JVsyr1koFJIkXXTRRbr55ps1YsQI3XHHHfrBD37g2AU5ybxemzdv1gMPPKDHHnvMsb+DrSX7dzLs0KFDmjp1qkKhkJYsWZLw52EHZv9WRzs/2nG3ivfftpUrV2r+/PlatWpV1DdlbhXr9QoGg5o+fboWLFigk046KVXDsyUzr7FQKCSfz6cnn3xSRUVFOv/88/Xb3/5Wjz32WMyzwJ56q3H99ddr6tSpHZ5z/PHHx/W9c3NzJTXPFOTl5bUc37t3b5t3NU4R6/V6++239emnn7b52meffdbuc//666/1i1/8Qs8//7wuuOACSdLw4cO1detW/eY3v9G5557b9SdggWResz59+qhbt24qKCiIOD506FCtW7cu/kFbKJnX64033tDevXt13HHHtRwLBoO65ZZbdP/99+vDDz/s0titkMzrFXbo0CFddtllqqmp0dq1a101+ys1/x6lp6e3mVnq6G91bm5u1PO7deum3r17J22sdhDP9QpbtWqVrr76aj3zzDOO/ZtultnrdfDgQW3atElbtmzR9ddfL6k53BmGoW7duunVV1/V9773vZSM3SrxvMby8vI0YMAA+f3+lmNDhw6VYRj65JNPdOKJJ3b6cz0VgPv06aM+ffok5Xvn5+crNzdXFRUVOu200yQ117W8/vrrWrRoUVJ+ZrLFer2Ki4sVCAS0ceNGFRUVSZLeeustBQIBjRs3LupjDh06pEOHDiktLfImRHp6estMpxMl85r16NFD3/3ud/Xuu+9GHH/vvfc0ePDgrg/eAsm8XjNnzmzzj+55552nmTNn6kc/+lHXB2+BZF4v6V/hd8eOHXrttddcGe569OihUaNGqaKiQpdccknL8YqKCl100UVRH1NcXKyysrKIY6+++qpGjx6t7t27J3W8VovneknNM78//vGPtXLlypZJDi8we72ys7P1zjvvRBxbsmSJ1q5dq2effVb5+flJH7PV4nmNjR8/Xs8884y++OIL9erVS1Lzv4VpaWkaOHBgbD847uVzLvfRRx8ZW7ZsMRYsWGD06tXL2LJli7Flyxbj4MGDLed85zvfMVavXt3y+b333mv4/X5j9erVxjvvvGNMmzbNU23Qhg8fblRWVhqVlZXGKaec0qblUuvrddZZZxnDhg0zXnvtNeODDz4wHn30USMzM9NYsmRJqodviXiu2erVq43u3bsbf/zjH40dO3YYDz74oJGenm688cYbqR5+ysVzvVrzShcIwzB/vQ4dOmRceOGFxsCBA42tW7catbW1LR9NTU1WPIWkCbdcWr58uVFdXW3cdNNNRs+ePY0PP/zQMAzDuOOOO4yZM2e2nB9ug3bzzTcb1dXVxvLlyz3ZBi3W6/XUU08Z3bp1MxYvXhzxOjpw4IBVTyGlzF6v1rzYBcLsNTt48KAxcOBA44c//KHxz3/+03j99deNE0880bjmmmti/pkE4HZceeWVhqQ2H6+99lrLOZKMRx99tOXzUChklJaWGrm5uUZGRoZx5plnGu+8807qB2+B+vp64/LLLzeysrKMrKws4/LLLzc+//zziHNaX6/a2lrjqquuMvr3729kZmYa3/nOd4z77rvPCIVCqR28ReK5ZoZhGMuXLze+/e1vG5mZmcapp57qmb7J8V6vI3kpAJu9XjU1NVH/5rX+u+cWixcvNgYPHmz06NHDGDlypPH666+3fO3KK680zjrrrIjz//a3vxmnnXaa0aNHD+P44483li5dmuIRW8vM9TrrrLOivo6uvPLK1A/cImZfX0fyYgA2DPPXbPv27ca5555rHHXUUcbAgQONOXPmGF999VXMP89nGP+/kh8AAADwAE91gQAAAAAIwAAAAPAUAjAAAAA8hQAMAAAATyEAAwAAwFMIwAAAAPAUAjAAAAA8hQAMAAAATyEAAwAAwFMIwADgMFdddZV8Pp98Pp+6d++uE044Qbfeequ+/PLLlnOee+45nX322fL7/erVq5eGDx+uu+++W/v374/4Xl9//bWOPfZY5eTk6Ouvv27zs/74xz/q7LPPVnZ2tnw+nw4cOJDspwcASUcABgAHKikpUW1trT744APdc889WrJkiW699VZJ0rx58zRlyhR997vf1V/+8hdt27ZN9913n/7xj3/oiSeeiPg+zz33nAoLC1VQUKDVq1e3+TlfffWVSkpK9Itf/CIlzwsAUsFnGIZh9SAAALG76qqrdODAAb3wwgstx37yk5/opZde0osvvqgxY8bo/vvv14033tjmsQcOHNAxxxzT8vk555yjqVOnyjAM/dd//ZfWrl0b9Wf+7W9/0znnnKPPP/884vEA4ETdrB4AAKDrjjrqKB06dEhPPvmkevXqpZ/97GdRzzsyvO7cuVOVlZVavXq1DMPQTTfdpA8++EAnnHBCikYNANagBAIAHG7jxo166qmn9P3vf187duzQCSecoO7du3f6uEceeUSTJk1qqQEuKSnRI488koIRA4C1CMAA4EAvvfSSevXqpczMTBUXF+vMM8/Ugw8+KMMw5PP5On18MBjUf/7nf2rGjBktx2bMmKH//M//VDAYTObQAcBylEAAgAOdc845Wrp0qbp3767+/fu3zPiedNJJWrdunQ4dOtThLPArr7yi3bt3a8qUKRHHg8GgXn31VU2aNCmp4wcAKzEDDAAO1LNnT33729/W4MGDI4Lu9OnT9cUXX2jJkiVRHxduY7Z8+XJNnTpVW7dujfi4/PLLtXz58lQ8BQCwDDPAAOAiY8aM0W233aZbbrlFu3fv1iWXXKL+/fvr/fff17Jly3T66adr+vTpKisr05o1a1RYWBjx+CuvvFIXXHCBPvvsM33rW99SXV2d6urq9P7770uS3nnnHWVlZem4445TTk6OFU8RALqMGWAAcJlFixbpqaee0ltvvaXzzjtPw4YN05w5czR8+HBdeeWVevzxx9WzZ099//vfb/PYc845R1lZWS39gpctW6bTTjtNP/nJTyRJZ555pk477TStWbMmpc8JABKJPsAAAADwFGaAAQAA4CkEYAAAAHgKARgAAACeQgAGAACApxCAAQAA4CkEYAAAAHgKARgAAACeQgAGAACApxCAAQAA4CkEYAAAAHgKARgAAACe8v8AXBe7GAAcJRkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fingerprints = fingerprints.detach()\n",
    "\n",
    "pca = PCA(n_components=2)\n",
    "\n",
    "principalComponents = pca.fit_transform(fingerprints)\n",
    "\n",
    "fig = plt.figure(figsize=(8, 8))\n",
    "ax = fig.add_subplot(1, 1, 1)\n",
    "ax.set_title(\"Fingerprints\")\n",
    "ax.set_xlabel('PCA1'); ax.set_ylabel('PCA2')\n",
    "\n",
    "ax.scatter(principalComponents[:, 0], principalComponents[:, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAscAAAK7CAYAAAAeFiKUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbOUlEQVR4nO3dfXzT9b338XdaSjuQRmhtUxS1cDxKrQ4KK1S8V6CIiOzsACJVrnnYJTsexZsN0eNK3XZx4XU23eZA5/AWRM8UlTpXRVGns1ihFE8tMof1DlK5T/GmUNPf9UeTSNq0Tdokv98veT0fjz62/vpN+k1NyzvffL6fr8MwDEMAAAAAlGL2BAAAAACrIBwDAAAAPoRjAAAAwIdwDAAAAPgQjgEAAAAfwjEAAADgQzgGAAAAfAjHAAAAgA/hGAAAAPAhHAOACR5++GE5HI4uP1577TWzp9jJa6+91mlu8+bN08knn2zanAAg2vqZPQEASGYPPfSQTjvttE7XCwoKTJhN5O644w7dcMMNZk8DAKKGcAwAJiosLNTYsWPNnkavjRgxwuwpAEBUUVYBABbmcDh03XXX6bHHHtPIkSM1YMAAffe739Xzzz/faez777+vK664Qrm5uUpPT9eJJ56oq666SocPHw6Mqa+v1/Tp0zV48GBlZGRo1KhReuSRR0LeV2lpqQYMGKDs7Gxde+21OnToUKdxocoqIpnzc889pzPPPFPp6ekaPny4fvOb32jJkiVyOBxB4/70pz9p3LhxcjqdGjBggIYPH64f/vCH4f4YASBsrBwDgIm8Xq+++eaboGsOh0OpqamBz//85z/rnXfe0Z133qljjjlGd911l2bMmKHt27dr+PDhkqStW7fq7LPPVnZ2tu68806dcsopcrvdWrdunY4cOaL09HRt375dZ511lnJycvTb3/5WWVlZWrVqlebNm6fPP/9cP/3pTyVJn3/+uc477zylpaVp+fLlys3N1erVq3XdddeF/bjCmXNVVZW+//3v69xzz9WTTz6pb775Rv/1X/+lzz//POi+qqurNWvWLM2aNUtLlixRRkaGPv74Y23YsKFXP3MA6JYBAIi7hx56yJAU8iM1NTUwTpKRm5trNDc3B641NTUZKSkpxtKlSwPXLrzwQuPYY481du/e3eX3nD17tpGenm588sknQdenTJliDBgwwDh48KBhGIaxaNEiw+FwGHV1dUHjJk6caEgyXn311cC1q6++2jjppJOCxoU75+9973vGsGHDjMOHDweuHTp0yMjKyjKO/ufpv/7rvwxJgfkBQCxRVgEAJnr00Uf1zjvvBH28/fbbQWMuuOACDRo0KPB5bm6ucnJy9PHHH0uSvvrqK73++uuaOXOmjjvuuC6/14YNG3TRRRdp2LBhQdfnzZunr776StXV1ZKkV199Vaeffrq++93vBo2bM2dO2I+rpzl/+eWX2rRpky6//HL1798/MO6YY47RtGnTgu7re9/7niRp5syZ+u///m/t3Lkz7HkAQKQIxwBgopEjR2rs2LFBH2PGjAkak5WV1el26enp+vrrryVJBw4ckNfr1QknnNDt99q3b5/y8vI6XR86dGjg6/7/dblcncaFutaVcOZsGIZyc3M7jet47dxzz9Wzzz6rb775RldddZVOOOEEFRYWas2aNWHPBwDCRTgGAJsbMmSIUlNT9dlnn3U7LisrS263u9P1Xbt2SZKys7MD45qamjqNC3WttwYPHiyHw9Gpvrir7zN9+nS98sor8ng8eu2113TCCSdozpw5gdVuAIgWwjEA2Nx3vvMdnXfeefrTn/6kvXv3djnuoosu0oYNGwJh2O/RRx/VgAEDNH78eEntJRHvvfeetm7dGjTu8ccfj9qcBw4cqLFjx+rZZ5/VkSNHAte/+OKLkF0t/NLT03Xeeedp2bJlkqQtW7ZEbU4AINGtAgBMVV9f36lbhdTeP7i7+uGOfv3rX+vss8/WuHHjdOutt+qf/umf9Pnnn2vdunW6//77NWjQIJWXl+v555/XBRdcoJ/97GcaMmSIVq9erT//+c+666675HQ6JUkLFy7Ugw8+qKlTp+oXv/hFoFvF+++/H7XHLUl33nmnpk6dqsmTJ+uGG26Q1+vV//t//0/HHHOM9u/fHxj3s5/9TJ999pkuuuginXDCCTp48KB+85vfKC0tTeedd15U5wQAhGMAMNH/+l//K+T1Bx54QP/2b/8W9v1897vfVU1NjcrLy7V48WIdOnRILpdLF154YWDD26mnnqq33npLt912m/793/9dX3/9tUaOHKmHHnpI8+bNC9yXy+XS66+/rhtuuEELFizQgAEDNGPGDN17772aPn16nx7v0UpLS/X000/rZz/7mWbNmiWXy6Uf//jH2rVrlx577LHA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",
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "encodings = encodings.detach()\n",
    "\n",
    "pca = PCA(n_components=2)\n",
    "\n",
    "principalComponents = pca.fit_transform(encodings)\n",
    "\n",
    "fig = plt.figure(figsize=(8, 8))\n",
    "ax = fig.add_subplot(1, 1, 1)\n",
    "ax.set_title(\"Encodings\")\n",
    "ax.set_xlabel('PCA1'); ax.set_ylabel('PCA2')\n",
    "\n",
    "ax.scatter(principalComponents[:, 0], principalComponents[:, 1])\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "chemprop",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
